home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / TP041992.ARJ / 04-19-92.TPC
Text File  |  1992-04-19  |  89KB  |  2,569 lines

  1.  
  2. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3.  
  4. Conference 4
  5. Date       01-01-00 00:00:00
  6. From       
  7. To         
  8. Subject    
  9.  
  10.  
  11. --- WM v2.01/92-0100
  12.  * Origin: A.C.E. of Spades (615)383-4381 The B.A.N. board (1:116/33)
  13.  * Tossed by SFToss v1.00b on 92/04/09  12:01:00
  14.  
  15. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  16.  
  17. Conference 4
  18. Date       04-13-92 20:36:35
  19. From       Dj Murdoch
  20. To         Kenneth Otto
  21. Subject    Re: Borland Pascal 6.1?
  22.  
  23.  
  24.  KO> So, is Turbo Pascal 6.1 rumored to be on the way?
  25.  
  26. I haven't heard anything about TP 6.1, but Borland has said on Compuserve
  27. that they plan to release a high end version of TP called "Borland Pascal"
  28. sometime this year.  It's supposed to support (include?) a DOS extender, so
  29. you can write protected mode programs without Windows; if it's like Borland
  30. C++, it'll also support Windows.  
  31.  
  32. I've also seen somewhere that Borland plans eventually to produce an OS/2
  33. version of TP, but probably not this year.
  34.  
  35. --- MajikToss v0.07m
  36.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:3601/14.20)
  37.  * Tossed by SFToss v1.00b on 92/04/14  11:32:21
  38.  
  39. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  40.  
  41. Conference 4
  42. Date       04-13-92 20:36:35
  43. From       Dj Murdoch
  44. To         Mike Copeland
  45. Subject    Re: Pascal, The Language
  46.  
  47.  
  48.  JM>Do assemblers have user-defined data types?
  49.  
  50.  MC>    Certainly! When you consider how Pascal implements 
  51.  MC> user-defined data types (it maps the hardware-defined data 
  52.  MC> to its data types), Assembler can do the same, and more...
  53.  
  54. More like "the same, and less".  Most assemblers don't do type checking beyond
  55. the size of the argument; that's a lot less useful than Pascal's strong type
  56. checking.
  57.  
  58. --- MajikToss v0.07m
  59.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:3601/14.20)
  60.  * Tossed by SFToss v1.00b on 92/04/14  11:32:21
  61.  
  62. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  63.  
  64. Conference 4
  65. Date       04-13-92 20:36:36
  66. From       Dj Murdoch
  67. To         Steve Gabrilowitz
  68. Subject    Re: Delay Patch
  69.  
  70.  
  71.  SG> OK, but I still think a better solution is to write your 
  72.  SG> own delay routine that is not dependant on the speed of the machine.
  73.  
  74. I think the point is that that is quite difficult.  If you want it to run
  75. accurately on anything from a 4.77 MHz PC to a 1000 Mhz 786, you'll need to
  76. do some fancy programming.
  77.  
  78. --- MajikToss v0.07m
  79.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:3601/14.20)
  80.  * Tossed by SFToss v1.00b on 92/04/14  11:32:21
  81.  
  82. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  83.  
  84. Conference 4
  85. Date       04-13-92 20:36:36
  86. From       Dj Murdoch
  87. To         J J Marquez
  88. Subject    Re: Are You Listening... ?
  89.  
  90.  
  91.  JJ>    Wanna know what my greatest fear is ? That C++ will add 
  92.  JJ> it in first, causing me to have to learn C.... AAAaaaaaaiiiieeeeee! 
  93.  
  94. I'm pretty sure that most numerical libraries for C++ add it in.  There are
  95. some advantages to being able to redefine operators.
  96.  
  97. --- MajikToss v0.07m
  98.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:3601/14.20)
  99.  * Tossed by SFToss v1.00b on 92/04/14  11:32:21
  100.  
  101. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  102.  
  103. Conference 4
  104. Date       04-13-92 20:37:00
  105. From       Trevor Carlsen
  106. To         Dale Frakes
  107. Subject    Variable # Parameters
  108.  
  109.  
  110.  
  111.  
  112.  DF> Does anyone out there know how to write a pascal (TP 6.0) function or 
  113.  
  114.  DF> procedure that accepts a variable number of parameters.  I assume this 
  115.  
  116.  DF> is possible, since Write, Writeln, Read, Readln, Concat, etc all 
  117.  DF> accept variable number of parameters, and they are written in Pascal.  
  118.  
  119.  DF> Has someone who has seen the source for the Run Time Libraries know 
  120.  DF> how this is done?  Again, I would assume that if someone can compile 
  121.  
  122.  DF> the RTL, it can be done within the Pascal environment.
  123.  
  124. Strictly speaking it cannot be done.  The procedures you refer to that *appear*
  125. to do that are actually changed by the compiler to effectively be *several*
  126. procedures in the actual exe file.
  127.  
  128. You could however create a procedure that gives the effect of a variable number
  129. of parameters by passing a single parameter which is a linked list.  I've
  130. never found that it is necessary to do this in the time I have been programming.
  131.  
  132. If you want to emulate the write/writeln/read/readln procedures at some time,
  133. it is easy to set up a TFDD (text file device driver) to do so.  The next
  134. issue of PNL (#11) may have an article explaining this very useful technique.
  135.  
  136. TeeCee
  137.  
  138. --- MajikToss v0.07m
  139.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (1:3601/14.20)
  140.  * Tossed by SFToss v1.00b on 92/04/14  11:32:28
  141.  
  142. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  143.  
  144. Conference 4
  145. Date       04-13-92 20:37:00
  146. From       Trevor Carlsen
  147. To         Frank Livaudais
  148. Subject    Text Files (1 Of 3)
  149.  
  150.  
  151.  
  152.  
  153.  FL> I want to read in text files bt make them binary so that you cant 
  154.  FL> 'type' them from dos.
  155.  
  156. I think that the fastest and easiest way of doing this would be to use some
  157. form of very simple encryption.  Here is a program to encrypt or decrypt a
  158. file - any file - using a simple password as your key and a key file that
  159. you have on your system that is not subject to ever being altered. This approach
  160. s being totally secure as it is almost a "one time pad" method.
  161.  
  162. It is tested as far as compilation is concerned and also briefly for valid
  163. execution.  It appears to work Ok.
  164.  
  165. {$A+,B-,D-,E+,F-,G+,I+,L-,N-,O-,R-,S-,V-,X+}
  166. {$M 4048,0,131040}
  167. program encrypt;
  168.  
  169. { Author Trevor J Carlsen - released into the public domain 1992         }
  170. {        PO Box 568                                                      }
  171. {        Port Hedland                                                    }
  172. {        Western Australia 6721                                          }
  173. {        Voice +61 91 73 2026  Data +61 91 73  2569                      }
  174. {        FidoNet 3:690/644                                               }
  175.  
  176. { Syntax: encrypt /p=Password /k=Keyfile /f=File                         }
  177. { Example -                                                              }
  178. {         encrypt /p=billbloggs /k=c:\command.com /f=p:\prog\anyfile.pas }
  179.  
  180. {         Password can be any alpha-numeric sequence of AT LEAST four    }
  181. {         characters.                                                    }
  182.  
  183. {         Keyfile is the full path of any file on the system that this   }
  184. {         program runs on.  This file, preferably a large one, must not  }
  185. {         be subject to changes.  This is critical as it is used as a    }
  186. {         pseudo "one time pad" style key and the slightest change will  }
  187. {         render decryption invalid.                                     }
  188.  
  189. {         File is the full path of the file to be encrypted or decrypted.}
  190.  
  191. { Notes:  Running Encrypt a second time with exactly the same parameters }
  192. {         decrypts an encrypted file.  For total security the keyfile    }
  193. {         can be stored separately on a floppy.  Without this keyfile or }
  194. {         knowledge of its contents it is IMPOSSIBLE to decrypt the      }
  195. {         encrypted file.                                                }
  196.  
  197. {         Parameters are case insensitive and may be in any order and    }
  198. {         may not contain any dos separator characters.                  }
  199.  
  200. const
  201.   BufferSize   = 65520;
  202.   Renamed      : boolean = false;
  203.  
  204. type
  205.   buffer_      = array[0..BufferSize - 1] of byte;
  206.   buffptr      = ^buffer_;
  207.   str80        = string[80];
  208.  
  209. var
  210.   OldExitProc  : pointer;
  211.   KeyFile,
  212.   OldFile,
  213.   NewFile      : file;
  214.   KeyBuffer,
  215.   Buffer       : buffptr;
  216.   KeyFileSize,
  217.   EncFileSize  : longint;
  218.   Password,
  219.   KFName,
  220.   FFName       : str80;
  221.  
  222. continued next message.
  223.  
  224. --- MajikToss v0.07m
  225.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (1:3601/14.20)
  226.  * Tossed by SFToss v1.00b on 92/04/14  11:32:28
  227.  
  228. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  229.  
  230. Conference 4
  231. Date       04-13-92 20:37:03
  232. From       Trevor Carlsen
  233. To         Frank Livaudais
  234. Subject    Text Files (2 Of 3)
  235.  
  236.  
  237.  
  238.  
  239. ... continued from previous message
  240.  
  241. procedure Hash(p : pointer; numb : byte; var result: longint);
  242.   { When originally called numb must be equal to sizeof    }
  243.   { whatever p is pointing at.  If that is a string numb   }
  244.   { should be equal to length(the_string) and p should be  }        
  245.   { ptr(seg(the_string),ofs(the_string)+1)                 }
  246.   var
  247.     temp,
  248.     w    : longint;
  249.     x    : byte;
  250.  
  251.   begin
  252.     temp := longint(p^);  RandSeed := temp;
  253.     for x := 0 to (numb - 4) do begin
  254.       w := random(maxint) * random(maxint) * random(maxint);
  255.       temp := ((temp shr random(16)) shl random(16)) +
  256.                 w + MemL[seg(p^):ofs(p^)+x];
  257.     end;
  258.     result := result xor temp;
  259.   end;  { Hash }
  260.  
  261. procedure NewExitProc; far;
  262.   { Does the "housekeeping" necessary on program termination }
  263.   var code : integer;
  264.   begin
  265.     ExitProc := OldExitProc;  { Reset exit procedure pointer to original }
  266.     case ExitCode of
  267.     0: writeln('Successfully encrypted or decrypted ',FFName);
  268.     1: begin
  269.          writeln('This program requires 3 parameters -');
  270.          writeln('  /pPassword');
  271.          writeln('  /kKeyFile (full path and name)');
  272.          write  ('  /fFile (The full path and name of the file');
  273.          writeln(' to be processed)');
  274.          writeln;
  275.          write  ('These parameters can be in any order, are case,');
  276.          writeln(' insensitive, and may not contain any spaces.');
  277.        end;
  278.     2: writeln('Could not find key file');
  279.     3: writeln('Could not rename and/or open original file');
  280.     4: writeln('Could not create encrypted file');
  281.     5: writeln('I/O error during processing - could not complete');
  282.     6: writeln('Insufficient memory available');
  283.     7: begin
  284.          writeln('Key  file is too small - aborted');
  285.          writeln;
  286.          writeln(' Key File must be at least as large as the buffer size ');
  287.          write  (' or the size of the file to be encrypted, whatever is the');
  288.          writeln(' smaller.');
  289.        end;
  290.     8: writeln('Password must consist of at least 4 characters');
  291.     else { any other error }
  292.       writeln('Aborted with error ',ExitCode);
  293.     end; { case }
  294.     if Renamed and (ExitCode <> 0) then
  295.       writeln(#7'WARNING: Original file''s name is now TEMP.$$$');
  296.     {$I-}
  297.     close(KeyFile); Code := IOResult;
  298.     close(NewFile); Code := IOResult;
  299.     close(OldFile); Code := IOResult;
  300.     if ExitCode = 0 then
  301.       Erase(OldFile); Code := IOResult;
  302.     {$I+}
  303.   end; { NewExitProc }
  304.  
  305.  
  306. function Str2UpCase(var S: string): string;
  307.   { Converts a string S to upper case.  Valid for English. }
  308.   var
  309.     x : byte;
  310.   begin
  311.     Str2UpCase[0] := S[0];
  312.     for x := 1 to length(S) do
  313.       Str2UpCase[x] := UpCase(S[x]);
  314.   end; { Str2UpCase }
  315.  
  316. continued in next message...
  317.  
  318.  
  319.  
  320.  
  321.  
  322. --- MajikToss v0.07m
  323.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (1:3601/14.20)
  324.  * Tossed by SFToss v1.00b on 92/04/14  11:32:28
  325.  
  326. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  327.  
  328. Conference 4
  329. Date       04-13-92 20:37:03
  330. From       Trevor Carlsen
  331. To         Frank Livaudais
  332. Subject    Text Files (3 Of 3)
  333.  
  334.  
  335.  
  336.  
  337. ... continued from previous message
  338.  
  339. procedure Initialise;
  340.   var
  341.     CommandLine : string;
  342.     FPos,FLen,
  343.     KPos,KLen,
  344.     PPos,PLen   : byte;
  345.  
  346.   procedure  AllocateMemory(var p: buffptr; size: longint);
  347.     begin
  348.       if size < BufferSize then begin
  349.         if MaxAvail < size then halt(6);
  350.         GetMem(p,size);
  351.       end
  352.       else begin
  353.         if MaxAvail < BufferSize then halt(6);
  354.         new(p);
  355.       end;
  356.     end; { AllocateMemory }
  357.  
  358.   begin
  359.     FillChar(OldExitProc,404,0);       { Initialise all global variables }
  360.     FillChar(Password,243,32);
  361.     ExitProc    := @NewExitProc;             { Set up new exit procedure }
  362.     if ParamCount <> 3 then halt(1);
  363.     CommandLine := string(ptr(PrefixSeg,$80)^)+' '; { Add trailing space }
  364.     CommandLine := Str2UpCase(CommandLine);      { Convert to upper case }
  365.     PPos        := pos('/P=',CommandLine);     { Find password parameter }
  366.     KPos        := pos('/K=',CommandLine);      { Find keyfile parameter }
  367.     FPos        := pos('/F=',CommandLine); { Find filename for encryption}
  368.     if (PPos = 0) or (KPos = 0) or (FPos = 0) then    { Parameters wrong }
  369.       Halt(1);
  370.     FFName      := copy(CommandLine,FPos+3,80);
  371.     FFName[0]   := chr(pos(' ',FFName)-1);       { Correct string length }
  372.     KFName      := copy(CommandLine,KPos+3,80);
  373.     KFName[0]   := chr(pos(' ',KFName)-1);
  374.     Password    := copy(CommandLine,PPos+3,80);
  375.     Password[0] := chr(pos(' ',Password)-1);
  376.     if length(Password) < 4 then halt(8);
  377.     { Create a random seed value based on the password }
  378.     Hash(ptr(seg(Password),ofs(Password)+1),length(Password),RandSeed);
  379.     assign(OldFile,FFName);
  380.     {$I-}
  381.     rename(OldFile,'TEMP.$$$');        { Rename the file to be encrypted }
  382.     if IOResult <> 0 then halt(3) else renamed := true;
  383.     assign(OldFile,'TEMP.$$$');
  384.     reset(OldFile,1);
  385.     if IOResult <> 0 then halt(3);
  386.     assign(NewFile,FFName);
  387.     rewrite(NewFile,1);
  388.     if IOResult <> 0 then halt(4);
  389.     assign(KeyFile,KFName);
  390.     reset(KeyFile,1);
  391.     if IOResult <> 0 then halt(2);
  392.     EncFileSize := FileSize(OldFile);
  393.     KeyFileSize := FileSize(KeyFile);
  394.     if KeyFileSize > EncFileSize then KeyFileSize := EncFileSize;
  395.     if IOResult <> 0 then halt(5);
  396.     {$I+}
  397.     if (KeyFileSize < BufferSize) and (KeyFileSize < EncFileSize) then   
  398.     halt(7);
  399.     AllocateMemory(buffer,EncFileSize);
  400.     AllocateMemory(KeyBuffer,KeyFileSize);
  401.   end; { Initialise }
  402.  
  403. procedure Main;
  404.   var
  405.     BytesRead : word;
  406.     finished  : boolean;
  407.  
  408.   procedure CodeBuffer(number: word);
  409.     { This is the actual encryption/decryption engine }
  410.     var x : word;
  411.     begin
  412.       for x := 0 to number - 1 do
  413.         buffer^[x] := buffer^[x] xor KeyBuffer^[x] xor Random(256);
  414.     end; { CodeBuffer }
  415.  
  416.   begin
  417.     {$I-}
  418.     finished := false;
  419.     repeat
  420.       BlockRead(OldFile,buffer^,BufferSize,BytesRead);
  421.       if (FilePos(KeyFile) + BytesRead) > KeyFileSize then
  422.         seek(KeyFile,0);
  423.       BlockRead(KeyFile,KeyBuffer^,BytesRead,BytesRead);
  424.       CodeBuffer(BytesRead);
  425.       finished := BytesRead < BufferSize;
  426.       BlockWrite(NewFile,buffer^,BytesRead);
  427.       if IOResult <> then halt(5);
  428.     until finished;
  429.     {$I+}
  430.   end;  { Main }
  431.  
  432. begin
  433.   Initialise;
  434.   Main;
  435. end.
  436.  
  437. TeeCee
  438.  
  439.  
  440. --- MajikToss v0.07m
  441.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (1:3601/14.20)
  442.  * Tossed by SFToss v1.00b on 92/04/14  11:32:28
  443.  
  444. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  445.  
  446. Conference 4
  447. Date       04-13-92 20:37:17
  448. From       Terry Hughes
  449. To         Joshua Kersey @ 930/22
  450. Subject    Execswap
  451.  
  452.  
  453.  
  454. JK@9>I need help using ExecSwap, can anyone help me out? This
  455. JK@9>little source does work, it executes it, but ARJ has no
  456. JK@9>memory to work with at all, what's catching my shirttail
  457. JK@9>here?
  458.  
  459. JK@9>In the ExecWSwp DOcs it says to use FreePtr^, but in TP,
  460. JK@9>it's an "Unknown Identifier" and haven't stooped to buy
  461. JK@P>TPRO yet...
  462.  
  463. FreePtr has nothing to do with TPRO. FreePtr is a system
  464. variable used in the heap managment in versions 4 through 5.5 of
  465. Turbo Pascal.
  466.  
  467. The EXECSWAP documentation explains three possible purposes for
  468. LastToSave: 1) save no heap, 2) save all heap but free list and
  469. 3) save all heap and free list. The third condition is the one
  470. that requires the expression you were trying to use:
  471. Ptr(Seg(FreePtr^)+$1000, 0). Under Turbo Pascal 6.0, which you
  472. apparently are using, this expression is no longer necessary
  473. since the free list is stored within the heap itself. So, case 2
  474. is no longer applicable and case 3 becomes simply "HeapPtr".
  475.  
  476. In case that wasn't clear, just pass HeapPtr for LastToSave and
  477. all will be well:
  478.  
  479.  if InitExecSwap(HeapPtr, 'EXECDEMO.$$$') then
  480.    ...
  481.  
  482. -Terry
  483.  
  484.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  485.  
  486. --- MajikToss v0.07m
  487.  * Origin: The Programmers Playhouse (1:3601/14.20)
  488.  * Tossed by SFToss v1.00b on 92/04/14  11:32:31
  489.  
  490. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  491.  
  492. Conference 4
  493. Date       04-13-92 20:37:20
  494. From       Terry Hughes
  495. To         Rob Kittredge
  496. Subject    C++ Products
  497.  
  498.  
  499.  
  500. RK> What was it that convinced you that TP was "better"
  501. RK> than C++ in particular?
  502.  
  503. Just about everything. <g>
  504.  
  505. I can't compare the environments since I don't use either IDE.
  506.  
  507. To the languages themselves, TP is a much leaner/cleaner
  508. language than C++. Bucking the trend here, I hope Borland keeps
  509. TP simple and avoids the temptation to add all the myriad
  510. features (gee gaws?) of C++ to TP. To me, TP's simplicity is
  511. what makes it such a pleasure to work with and what can make a
  512. TP programmer more productive than a C++ programmer.
  513.  
  514. Beyond that, the biggest issues were compilation capacity,
  515. compilation speed, linking speed and ease of smart linking (in
  516. C++, smart linking requires putting every smart-linkable
  517. procedure in its own OBJ file). TP wins hands down in all of
  518. those categories (although BC++ 3.0 caught up in compilation
  519. capacity).
  520.  
  521. RK>  P.S. did you happen to take a look at my mods to OPRO for
  522. RK>TP's MAKEHELP to support those "+1" constants?
  523.  
  524. We decided not to merge those changes into the production
  525. MAKEHELP since it's not a request we've ever heard before.
  526. However, we've kept your version of MAKEHELP around should the
  527. need ever arise. Thanks for sending it.
  528.  
  529. -Terry
  530.  
  531.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  532.  
  533. --- MajikToss v0.07m
  534.  * Origin: The Programmers Playhouse (1:3601/14.20)
  535.  * Tossed by SFToss v1.00b on 92/04/14  11:32:31
  536.  
  537. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  538.  
  539. Conference 4
  540. Date       04-13-92 20:37:20
  541. From       Terry Hughes
  542. To         Joshua Kersey @ 930/22
  543. Subject    Re: Execute With Swap
  544.  
  545.  
  546.  
  547. JK@9>No, it wasn't posted, but the code's kinda long, I'll post
  548. JK@9>it, if it's agreeable to Terry Hughes, it's part ASM and
  549. JK@9>part Pascal..
  550.  
  551. It's OK by me (since it's PD code) but instead why don't I just
  552. mention our BBS number here (719-260-9726). That way, Kevin can
  553. come get it if he wants it and we'll avoid generating the
  554. lengthy messages that the code would require.
  555.  
  556. -Terry
  557.  
  558.  
  559.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  560.  
  561. --- MajikToss v0.07m
  562.  * Origin: The Programmers Playhouse (1:3601/14.20)
  563.  * Tossed by SFToss v1.00b on 92/04/14  11:32:31
  564.  
  565. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  566.  
  567. Conference 4
  568. Date       04-13-92 20:37:20
  569. From       Terry Hughes
  570. To         Jud Mccranie
  571. Subject    B-tree Filer
  572.  
  573.  
  574.  
  575. JM>First, a slight misprint in the BTree manual, page 64, row 12,
  576. JM>"NextKey" should be "BTNextKey".
  577.  
  578. Thanks. We'll fix that in the next printing.
  579.  
  580. JM>up for editing.  Then if I press pageDown (for next record), I use
  581. JM>the NextPrev proc, but the first (only) time I do that it always calls
  582. JM>up the very first record with the matching key, which is not generally
  583. JM>the previous record.
  584.  
  585. BTNextKey has two distinct behaviors. If the internal
  586. "sequential pointer" is valid then BTNextKey ignores the passed
  587. parameters and returns the next key in sequence. If the internal
  588. sequential pointer is invalid then BTNextKey uses the passed
  589. parameters to reposition the sequential pointer. Note that this
  590. second behavior only occurs if the SearchForSequential option
  591. has been turned on (as it is by default).
  592.  
  593. Based on your description, I would guess that
  594. SearchForSequential is on and the internal sequential pointer
  595. is invalid or was never set to begin with. A quick way to test
  596. this theory would be to turn SearchForSequential off -- in that
  597. case your call to NextPrevRecord should return 10255 when trying
  598. to get the next record and 10265 when trying to get the previous
  599. record.
  600.  
  601. You might want to look at the reference section for BTNextKey
  602. for a more complete discussion of this issue.
  603.  
  604. -Terry
  605.  
  606.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  607.  
  608. --- MajikToss v0.07m
  609.  * Origin: The Programmers Playhouse (1:3601/14.20)
  610.  * Tossed by SFToss v1.00b on 92/04/14  11:32:32
  611.  
  612. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  613.  
  614. Conference 4
  615. Date       04-13-92 20:37:20
  616. From       Terry Hughes
  617. To         David G. Edwards
  618. Subject    Why I Like Tp 5.5 Ide (c
  619.  
  620.  
  621.  
  622. DGE>In a message of <10 Mar 92 13:54:43>, Stephan Patterson (1:240/507.3)
  623. writes
  624.  
  625. DGE> >Like it or not,
  626. DGE> >SAA/CUA-compliant user interfaces are the way of the future. Most people
  627. DGE> >prefer them, by far, to the older style interface a la OPRO.
  628.  
  629. DGE>I thought OPRO could be used to design SAA/CUA user-interfaces.  Am I off?
  630.  
  631.  
  632. You are correct. OPRO can be used to build CUA compliant
  633. interfaces by virtue of its flexibility. And OPRO has had
  634. specific support for dialog boxes (with list boxes, radio
  635. buttons, check boxes, etc.) since version 1.03.
  636.  
  637. -Terry
  638.  
  639.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  640.  
  641. --- MajikToss v0.07m
  642.  * Origin: The Programmers Playhouse (1:3601/14.20)
  643.  * Tossed by SFToss v1.00b on 92/04/14  11:32:32
  644.  
  645. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  646.  
  647. Conference 4
  648. Date       04-13-92 20:37:20
  649. From       Terry Hughes
  650. To         Dj Murdoch
  651. Subject    Re: Binary Tree Linked L
  652.  
  653.  
  654.  
  655. DM> > Actually B-Trees are more effecient than Binary tress and
  656. DM> DF>
  657. DM> DF> I thought the B in B-tree stood for Binary.  What is the
  658. DM> DF> difference between a b-tree and a binary tree?  (Just a
  659. DM> DF> basic explanation, I don't want source and such).
  660.  
  661. DM>B is for Balanced - to the extent possible, every node has
  662. DM>the same number of subnodes.  A binary tree can be so
  663. DM>imbalanced as to be nearly a linked list, if new nodes are
  664. DM>always added on the right, for instance.
  665.  
  666. In the circles that I travel (database toolbox vendors and
  667. programmers) B-Tree is generally understood to mean Bayer-Tree
  668. -- Bayer being one of the inventors of this particular
  669. structure. It's different from a binary tree in that each node
  670. contains pointers to many subnodes, rather than just left/right
  671. subnodes and every node must be at least half-full. I believe a
  672. Bayer-Tree implies balancing as well but I don't have my
  673. reference here right now to check.
  674.  
  675. -Terry
  676.  
  677.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  678.  
  679. --- MajikToss v0.07m
  680.  * Origin: The Programmers Playhouse (1:3601/14.20)
  681.  * Tossed by SFToss v1.00b on 92/04/14  11:32:32
  682.  
  683. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  684.  
  685. Conference 4
  686. Date       04-13-92 08:50:03
  687. From       Dj Murdoch
  688. To         Jud Mccranie
  689. Subject    Re: More features needed in TP
  690.  
  691.   JM> You're probably right about the access time of pointing to the heap
  692.  JM> being about the same as allowing multiple segments, and that is one
  693.  JM> consideration.  However, primarily the reason is for the programmer.
  694.  JM> I've used the method you suggest, and it is awfully dumb to have to do
  695.  JM> it to get more than 64K of data.  It is bad programming style.
  696.  
  697. One might say that having 64K of global data is bad style in itself.  What
  698. sort of data is it?
  699.  
  700. --- Msg V3.2
  701.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  702.  * Tossed by SFToss v1.00b on 92/04/14  13:38:09
  703.  
  704. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  705.  
  706. Conference 4
  707. Date       04-13-92 08:54:00
  708. From       Dj Murdoch
  709. To         Mike Copeland
  710. Subject    Re: testing records for equality
  711.  
  712.   MC>    Sure!  Just as you can compare variables of the same 
  713.  MC> type in Pascal, you can directly compare variables of the 
  714.  MC> same user-defined (record) types - just try it, it'll 
  715.  MC> work.  (And a whole lot faster than the way you're doing it...)  
  716.  MC>    This is fundamental Pascal, which you should have 
  717.  MC> learned in your 1st Pascal class, I'd have thought...
  718.  
  719. Did you try it?  It doesn't work for me.  If x and y are declared to be of
  720. type myrec, a record type, I get
  721.  
  722.  TEST.PAS(10): Error 41: Operand types do not match operator.
  723.   if x=y then
  724.          ^
  725.  
  726.  
  727. --- Msg V3.2
  728.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  729.  * Tossed by SFToss v1.00b on 92/04/14  13:38:09
  730.  
  731. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  732.  
  733. Conference 4
  734. Date       04-13-92 08:55:50
  735. From       Dj Murdoch
  736. To         John Giesbrecht
  737. Subject    Re: Procedure start-up code
  738.  
  739.   JG> LISTNETS.REPLACE: asm                                        
  740.  JG>   cs:023F 55             push   bp                           
  741.  JG>   cs:0240 89E5           mov    bp,sp                        
  742.  JG>   cs:0242 31C0           xor    ax,ax                        
  743.  JG>   cs:0244 9ADF045153     call   5351:04DF                    
  744.  JG> LISTNETS.124:  push ds                                       
  745.  JG>   cs:0249 1E             push   ds
  746.  JG>     ...
  747.  
  748.  JG> The Replace procedure has no local variables, and is declared as:
  749.  
  750.  JG>   procedure replace(oldch, newch : char; var s : string); assembler;
  751.  
  752.  JG> Now, according to p. 304 of the TP Programmer's Guide (as 
  753.  JG> I understand it), the entry code should consist only of 
  754.  JG> push bp, and mov bp, sp.  So why is the FAR call there?  
  755.  JG> And what does it do?  
  756.  
  757. That's a call to the stack checking mechanism.  You've compiled this code
  758. with the $S+ option in effect; it sets AX to 0, to say that it needs to check
  759. that there's enough stack space for a procedure/function with 0 bytes of locals
  760. to safely execute.  If the current value of the stack pointer shows you've
  761. got less than 512 bytes of stack space, it'll abort your program.
  762.  
  763. --- Msg V3.2
  764.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  765.  * Tossed by SFToss v1.00b on 92/04/14  13:38:09
  766.  
  767. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  768.  
  769. Conference 4
  770. Date       04-13-92 09:00:53
  771. From       Dj Murdoch
  772. To         David Solly
  773. Subject    Re: Help Needed with TP arrays
  774.  
  775.   DS>   You have hit upon one of the major differences between 
  776.  DS> BASIC and (Standard) Pascal.  In a nutshell:  no you 
  777.  DS> cannot redimension Pascal arrays on the fly like you can 
  778.  DS> in BASIC.  This seems to be a common characteristic of all 
  779.  DS> compiled languages.  I understand that BASIC compilers 
  780.  DS> also place the same restriction on the programmer.
  781.  
  782. No, it's not a flaw of all compiled languages:  MS Fortran allows dynamically
  783. sized arrays.  It's a flaw of Turbo Pascal.  
  784.  
  785. There are various ways around it; they all involve allocating the array on
  786. the heap.  The one I prefer makes the array an object, so that all the allocatio
  787. /deallocation is localized in its own code, but you don't need to do it that
  788. way.  They simplest way from the point of view of usage is something like this:
  789.  
  790.  
  791. type
  792.   Tarray : array[1..32000] of integer;   { Set the upper limit as large as
  793.                                               you'll ever need } var
  794.   p : ^Tarray;
  795.   size : integer;
  796.  
  797. begin
  798.   readln(size);
  799.   getmem(p,size*sizeof(integer));    { Now p is allocated only from 1..size }
  800.  
  801.   p^[1] := 1;    { set entry 1 }
  802.  
  803.   p^[2] := 3;    { set entry 2 }
  804.  
  805.   
  806.   { and so on }
  807.  
  808. --- Msg V3.2
  809.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  810.  * Tossed by SFToss v1.00b on 92/04/14  13:38:09
  811.  
  812. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  813.  
  814. Conference 4
  815. Date       04-13-92 09:08:47
  816. From       Dj Murdoch
  817. To         Jeff Sheets
  818. Subject    Fast video (was: thanks)
  819.  
  820.   JS> Well it is working at a pixel write procedure taking 
  821.  JS> approximately 3 KHz.  My original purpose was to make it 
  822.  JS> go at the speed of the screen and I don't understand how 
  823.  JS> my 10 MHz computer is slowing the procedure down THAT 
  824.  JS> slow.  If you or anyone else knows just how I can speed 
  825.  JS> this up WITHOUT external procedures or inline code(I'd 
  826.  JS> rather use the Asm directive), I would appreciate it.
  827.  
  828. You'll have to show us some code before we could hope to speed it up.  Generally
  829. speaking though, writing a single pixel is going to be slow:  you'll have
  830. all that procedure call overhead every time.  Try to write higher level graphics
  831. routines (e.g. write a line, fill an area, etc.) as single procedures, and
  832. you'll see a big improvement.
  833.  
  834.  
  835.  
  836. --- Msg V3.2
  837.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  838.  * Tossed by SFToss v1.00b on 92/04/14  13:38:09
  839.  
  840. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  841.  
  842. Conference 4
  843. Date       04-13-92 09:12:22
  844. From       Dj Murdoch
  845. To         Ian Macmillan
  846. Subject    Re: turbo pascal/turbo pascal profession
  847.  
  848.   IM> i am a beginner and just going out to get either turbo 
  849.  IM> pascal or turbo pascal proffesional v6.0, and i need to 
  850.  IM> know what one is the best to get for a geginner that will 
  851.  IM> have everything in it when i am more familiar with it and 
  852.  IM> more advance with pascall as well.
  853.  
  854. I'd recommend getting the basic package.  The professional package contains
  855. everything in it, plus:
  856.    - a compiler which can use extended memory to compile huge programs
  857.    - a debugger which lets you work on machine code.  (The regular debugger
  858.      that comes in the standard package works on Pascal code only.)
  859.    - an assembler
  860.    - a few other related tools, like a .EXE file dumper.
  861.  
  862. Unless you want to work with assembler very soon, I'd say you don't need the
  863. professional version.  By the time you're ready for it, there should be a
  864. new release of TP (version 6 is about 18 months old now), and you can always
  865. upgrade to the professional version then, if you want.
  866.  
  867. You were asking about text versus graphics mode:  both versions work in text
  868. mode (they come with the same editor), but it is styled like a Windows program,
  869. with borders on the windows, and is designed to be used with a mouse.  If
  870. the line-drawing characters don't cause trouble for you, then it would be
  871. fine.  If they do, you'll probably want to use your own editor and the command-l
  872. ne version of the compiler.  
  873.  
  874. You might want to write to Borland (I'll give the address below), and ask
  875. if they have any special products for people with low vision.  I don't know
  876. if they do or not.  Their address is:
  877.  
  878.   Borland International Inc.
  879.   1800 Green Hills Road
  880.   P.O. Box 660001
  881.   Scotts Valley, CA 95067-0001
  882.   U.S.A.
  883.  
  884. --- Msg V3.2
  885.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  886.  * Tossed by SFToss v1.00b on 92/04/14  13:38:09
  887.  
  888. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  889.  
  890. Conference 4
  891. Date       04-13-92 05:19:21
  892. From       Trevor Carlsen
  893. To         Jud Mccranie
  894. Subject    testing records for equality
  895.  
  896.  
  897.  
  898.  JM> What is the best way to test 2 records (of the same type) to see
  899.  JM> if they are the same?  Currently I'm using MOVE to copy each to an
  900.  JM> array of bytes and then do a byte by byte comparison.  Is there a
  901.  JM> better way?
  902.  
  903. Although I question using the move procedure as it is unnecessary and time
  904. consuming (see below), that is valid if there are no string types in any field.
  905.  If a string type exists then you need to test field by field.  This caveat
  906. can be dispensed with if when manipulating string fields, the field is fully
  907. nulled out first.  However time constraints can make this impractical on occasio
  908. s.
  909.  
  910. Another trick is to include a word sized check sum field.  Use that for the
  911. comparison.  If the same do a more thorough check.  This method may be unaccepta
  912. le due to the extra memory requirement.
  913.  
  914. Turbo Power's OPro and TPro have a function ( CompStruct ) in the TPStrings
  915. unit that will do what you want but the string problem still exists and has
  916. to be solved first.
  917.  
  918. Here is a better way to do your byte by byte comparison without the move procedu
  919. e:
  920.  
  921. type
  922.   YourType = ...
  923.   ByteArray = array[1..65520] of byte;
  924.   PtrByteArray = ^ByteArray;
  925.  
  926. function Equal(var Struct1, Struct2; size: word): boolean; 
  927.   var x     : word;
  928.       s1,s2 : PtrByteArray;
  929.       done  : boolean;
  930.   begin
  931.     done := false;
  932.     x    := 1; 
  933.     s1   := @Struct1;
  934.     s2   := @Struct2;
  935.     repeat
  936.       done := s1^[x] <> s2^[x];
  937.       inc(x);
  938.     until done or (x > size);
  939.     Equal := not done;
  940.   end; { Equal }
  941.  
  942. Untested.
  943.  
  944. TeeCee
  945.  
  946.  
  947. --- TC-ED   v2.01  
  948.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  949.  * Tossed by SFToss v1.00b on 92/04/14  19:39:17
  950.  
  951. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  952.  
  953. Conference 4
  954. Date       04-13-92 04:53:47
  955. From       Trevor Carlsen
  956. To         David Rye
  957. Subject    Time Zones
  958.  
  959.  
  960.  
  961.  DR> (904) 659-2337  2200 - 0600 Eastern Standard ONLY please. I'll be 
  962.  DR> going 24 hours in a few weeks, but for now make sure and check the 
  963.  DR> time before you dial.
  964.  
  965. Although the person to whom you addressed this would probably have no problem
  966. with this as he is in the USA,  you should remember that about 50% of the
  967. readers of this echo have very little idea what Eastern Standard is.  In my
  968. country we also have Eastern Standard and I can only guess that EST for you
  969. is about GMT-4, whereas ours is GMT+10. (P-l-e-a-s-e everybody, don't rush
  970. to enlighten me!  I can easily check it out myself if I need the exact differenc
  971. .)  When talking time zones in an international echo such as this, it is better
  972. to use Universal Time (or GMT as it is known in some places).
  973.  
  974. TeeCee
  975.  
  976. --- TC-ED   v2.01  
  977.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  978.  * Tossed by SFToss v1.00b on 92/04/14  19:39:17
  979.  
  980. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  981.  
  982. Conference 4
  983. Date       04-13-92 05:05:50
  984. From       Trevor Carlsen
  985. To         Sujal Patel
  986. Subject    Turbo Pascal Bug?
  987.  
  988.  
  989.  
  990.  SP> Is it Just me or is this a Bug in Pascal ?
  991.  
  992. It is just you!!! (See below)
  993.  
  994.  SP> {$M 8192,0,0}
  995.  SP> Uses Dos;
  996.  SP> Begin
  997.  SP>   {$I-}
  998.  SP>    Mkdir ('\Temp');
  999.  SP>   {$I+}
  1000.        if IOResult = 0 then;   {<<<<<<<<------ add this line }
  1001.  SP>   SwapVectors;
  1002.  SP>   Exec ('C:\Command.Com','');
  1003.  SP>   SwapVectors;
  1004.  SP>   Writeln (DosExitCode); 
  1005.  SP> End.
  1006.  
  1007.  SP> When you Run this Program Segment and It Can
  1008.  SP> Make \Temp, then the program runs fine, BUT IF
  1009.  SP> \Temp ALREADY exists, I get a Runtime Error 5 (File Access Denied)
  1010.  SP> On the Writeln (DosExitCode).  I think that Pascal closed the 
  1011.  SP> Standard Output File.. Can anyone Help?
  1012.  
  1013. If an I/O error occurs when the I/O error checking is disabled, no further
  1014. I/O can occur until the IOResult function has been checked.  If this is not
  1015. done the NEXT I/O attempt with I/O checking enabled will fail with the original
  1016. error number.  This is explained on p81 of the TP6 Library reference.
  1017.  
  1018. TeeCee
  1019.  
  1020. --- TC-ED   v2.01  
  1021.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1022.  * Tossed by SFToss v1.00b on 92/04/14  19:39:17
  1023.  
  1024. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1025.  
  1026. Conference 4
  1027. Date       04-13-92 14:34:08
  1028. From       Trevor Carlsen
  1029. To         Sujal Patel
  1030. Subject    Re: Vision BBS Source
  1031.  
  1032.  
  1033.  
  1034.  SP> I don't Understand some people.. Why do You give the credit for a hack 
  1035.  
  1036.  SP> to another hack.  LSD is derived from Forum-PC... This is an ancient 
  1037.  
  1038.  SP> BBS program and Ken Sallot has changed about 60% of the Forum-PC 
  1039.  SP> source.... If Ken Duda (The Author of Forum, I think) really wanted 
  1040.  SP> to, he could sue Ken Sallot for Copyright Infingement.  Why Not Give 
  1041.  
  1042.  SP> Credit, were credit is due...
  1043.  
  1044. I didn't see the message you are replying to here but in any event you are
  1045. off-topic.  Please restrict yourself to answering messages that are on-topic
  1046. in future.
  1047.  
  1048. Trevor Carlsen
  1049. Moderator.
  1050.  
  1051. --- TC-ED   v2.01  
  1052.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1053.  * Tossed by SFToss v1.00b on 92/04/14  19:39:18
  1054.  
  1055. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1056.  
  1057. Conference 4
  1058. Date       04-13-92 19:31:30
  1059. From       Trevor Carlsen
  1060. To         Bob Bannon
  1061. Subject    Help Needed with TP arrays
  1062.  
  1063.  
  1064.  
  1065.  BB> ... but I am stumped over TP5.5's treatment of arrays.
  1066.  BB> Here's the question:
  1067.  
  1068.  BB>       Is there any way to "re-dimension" an array once the
  1069.  BB>       program has started running?
  1070.  
  1071.  BB> Put another way: when I declare a variable as an array, TP
  1072.  BB> seems rather insistent that the dimensions be a fixed
  1073.  BB> constant.  What I would like to do is allow the size of the
  1074.  BB> array to be determined based on user input.
  1075.  
  1076.  BB> Oh, one thing: my main purpose here is to have a more
  1077.  BB> flexible set of matrix-handling procedures - something that
  1078.  BB> will take what comes to it, and not waste memory with arrays
  1079.  BB> that must be pre-defined as very large to accomodate
  1080.  BB> whatever the user might ask for.
  1081.  
  1082. The only way this can be achieved in TP is by creating space for the array
  1083. on the heap.  As you will only find out how big the array is at run-time,
  1084. this will necessitate you forgoing the ability to use range checking and thus
  1085. you will need to include code to ensure that your assignments are not out
  1086. of range.  Here is the skeleton of how to go about creating a dynamic array
  1087. - (Note that no range checking code is shown). 
  1088.  
  1089. {$R-}
  1090.   type
  1091.     DynamicArray = array[0..0] of byte;  { except for the starting bound }
  1092.     { range is irrelevant.  It is important in this case though that there }
  1093.  
  1094.     { only  be a range of one element but this is only because of size }
  1095.     { calculations shown later. }
  1096.     DAPtr        = ^DynamicArray;
  1097.   var
  1098.     TheArray     : DAPtr;  { This is the pointer you use to access the array }
  1099.  
  1100.   begin
  1101.     GetArraySize;
  1102.     
  1103.     { Allocate the memory required on the heap }
  1104.     GetMem(TheArray,ArraySize * sizeof(DynamicArray));
  1105.  
  1106.     { Initialize the array }
  1107.     FillChar(TheArray^,ArraySize * sizeof(DynamicArray),0);
  1108.  
  1109.     { Start using the array }
  1110.     TheArray^[100] := Whatever;
  1111.  
  1112. If you are unfamiliar with pointers, study the above carefully and read up
  1113. on them from a good text.  Basically pointers are variables which contain
  1114. an address.  You can get/set the value of the variable located at that address
  1115. by "dereferencing" the pointer.  This is done by using the carat character
  1116. after the pointer's name.  It is very important to:
  1117.   (a) Initialise the pointer by a call to GetMem or New or by assigning it an
  1118.  
  1119.       address value before attempting to use it
  1120.   (b) Once it is initialised never forget to dereference it when using it.
  1121.  
  1122. There are many caveats associated with working without a "safety net" in this
  1123. way.  If you are familiar with C you would be fairly comfortable.  Coming
  1124. from a BASIC background may mean that you need to be very sure that you understa
  1125. d exactly how you are supposed to do something and more particularly why.
  1126.  A mistake can have horrendous effects but the power gained from these technique
  1127.  can also be impressive if used properly.
  1128.  
  1129. TeeCee
  1130.     
  1131.  
  1132.  
  1133. --- TC-ED   v2.01  
  1134.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1135.  * Tossed by SFToss v1.00b on 92/04/14  19:39:18
  1136.  
  1137. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1138.  
  1139. Conference 4
  1140. Date       04-13-92 15:15:49
  1141. From       Trevor Carlsen
  1142. To         Rune Fredriksen
  1143. Subject    Floodfill
  1144.  
  1145.  
  1146.  
  1147.  RF> I have written everything else for all the BGI functions, and the last 
  1148.  
  1149.  RF> thing i need is a floodfill, just to see how its done...
  1150.  
  1151. Why is the Graph unit's FloodFill procedure of no use to you?
  1152.  
  1153. TeeCee
  1154.  
  1155. --- TC-ED   v2.01  
  1156.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1157.  * Tossed by SFToss v1.00b on 92/04/14  19:39:18
  1158.  
  1159. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1160.  
  1161. Conference 4
  1162. Date       04-14-92 02:28:31
  1163. From       Trevor Carlsen
  1164. To         Mike Copeland
  1165. Subject    testing records for equality
  1166.  
  1167.  
  1168.  
  1169.  JM>What is the best way to test 2 records (of the same type) to see
  1170.  JM>if they are the same?  Currently I'm using MOVE to copy each to an
  1171.  JM>array of bytes and then do a byte by byte comparison.  Is there a
  1172.  JM>better way?
  1173.  
  1174.  MC>    Sure!  Just as you can compare variables of the same type in 
  1175.  MC> Pascal, you can directly compare variables of the same user-defined 
  1176.  MC> (record) types - just try it, it'll work.  (And a whole lot faster 
  1177.  MC> than the way you're doing it...)  
  1178.  MC>    This is fundamental Pascal, which you should have learned in your 
  1179.  
  1180.  MC> 1st Pascal class, I'd have thought...
  1181.  
  1182. Sorry Mike but IMHO you are wrong.  That cannot be done in either TP *or*
  1183. standard Pascal.
  1184.  
  1185. eg
  1186.   type
  1187.     YourType = record
  1188.                  L : longint;
  1189.                  st: string;
  1190.                 end;
  1191.   var
  1192.     V1, V2 : YourType;
  1193.  
  1194.   begin
  1195.     if V1 = V2 then...  
  1196.  
  1197. will not compile.  Error 41: Operand types do not match operator.
  1198. This means that a test for equality between these types cannot be applied.
  1199.  
  1200.  
  1201. TeeCee
  1202.  
  1203. --- TC-ED   v2.01  
  1204.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1205.  * Tossed by SFToss v1.00b on 92/04/14  19:39:19
  1206.  
  1207. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1208.  
  1209. Conference 4
  1210. Date       04-14-92 01:34:38
  1211. From       Trevor Carlsen
  1212. To         Gerald Gutierrez
  1213. Subject    Test
  1214.  
  1215.  
  1216.  
  1217.  > dskjfdhjkghjkdshgdgkjdshgsdkjhgd
  1218.  > dsgjkdshgkjdhg
  1219.  > fdg
  1220.  
  1221.  GG> A meaningful message may suffice as a test message, this is not a 
  1222.  GG> trash message area.
  1223.  
  1224. In future would you prefer that I copy you in on the netmail messages I send
  1225. to people doing this sort of thing?  (That way you will know that I am doing
  1226. my job and not need to post replies like this.)
  1227.  
  1228. Any reply by NETMAIL only please...
  1229.  
  1230. Trevor Carlsen
  1231. Moderator.
  1232.  
  1233. --- TC-ED   v2.01  
  1234.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1235.  * Tossed by SFToss v1.00b on 92/04/14  19:39:19
  1236.  
  1237. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1238.  
  1239. Conference 4
  1240. Date       04-14-92 01:42:24
  1241. From       Trevor Carlsen
  1242. To         Ian Macmillan
  1243. Subject    turbo pascal/turbo pascal professional
  1244.  
  1245.  
  1246.  
  1247.  IM> i am a beginner and just going out to get either turbo pascal or turbo 
  1248.  
  1249.  IM> pascal proffesional v6.0, and i need to know what one is the best to 
  1250.  
  1251.  IM> get for a geginner that will have everything in it when i am more 
  1252.  IM> familiar with it and more advance with pascall as well.
  1253.  
  1254.  IM> I am also legally blind with only two percent of good vision and i use 
  1255.  
  1256.  IM> a voice synthesizer to do anything on the computer. so, i would requir 
  1257.  
  1258.  IM> a version that is character base for now ...
  1259.  
  1260. Ian,  I would recommend that you get the standard TP6 version.  It should
  1261. take you at least 12 months or more before you would gain significant benefit
  1262. by having the professional version.  Once you feel that you are at a competence
  1263. level commensurate with needing that version you can then get it.  By then
  1264. it will be a new version and you will be able to take advantage of a partial
  1265. upgrade.
  1266.  
  1267. BTW - both are character based although  the IDE (Integrated Development Environ
  1268. ent) is based on a GUI using text mode.  Not knowing how your voice synthesizer
  1269. works, I can't advise you there.  Perhaps you would do well to call Borland
  1270. direct.
  1271.  
  1272. TeeCee
  1273.  
  1274. --- TC-ED   v2.01  
  1275.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1276.  * Tossed by SFToss v1.00b on 92/04/14  19:39:19
  1277.  
  1278. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1279.  
  1280. Conference 4
  1281. Date       04-14-92 02:02:37
  1282. From       Trevor Carlsen
  1283. To         Matt Heck
  1284. Subject    test
  1285.  
  1286.  
  1287.  
  1288.  MH>  I think we need an area called "Test" for these. Just "tests"
  1289.  MH>  and nothing else...
  1290.  
  1291. Matt you have previously been warned privately by netmail on off-topic messages.
  1292.  This is a final public warning.  Ignore off-topic messages and leave the
  1293. moderating to the moderator.  
  1294.  
  1295. In future confine your messages to answering (or asking or discussing) Pascal
  1296. related topics only.
  1297.  
  1298. Trevor Carlsen
  1299. Moderator.
  1300.  
  1301. --- TC-ED   v2.01  
  1302.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1303.  * Tossed by SFToss v1.00b on 92/04/14  19:39:19
  1304.  
  1305. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1306.  
  1307. Conference 4
  1308. Date       04-14-92 02:13:56
  1309. From       Trevor Carlsen
  1310. To         Kevin O'Donnell
  1311. Subject    READLN and READ not reading.
  1312.  
  1313.  
  1314.  
  1315.  KO> function readtxt(x,y,fore,back:integer):string;
  1316.  KO> var
  1317.  KO>      string_input : string;
  1318.  KO>      tempnum : integer;
  1319.  KO> begin
  1320.  KO>      textcolor(fore);
  1321.  KO>      textbackground(back);
  1322.  KO>      gotoxy(x,y);
  1323.  KO>      read(string_input);
  1324.  KO>      readtxt := string_input;
  1325.  KO> end;
  1326.  
  1327.  KO> Now, in a program I am writing, I execute this func. twice in a row.  
  1328.  
  1329.  KO> The first one works fine and returns the proper string.  The second 
  1330.  KO> time I execute it however, when it comes to 'read(string_input', TP 
  1331.  KO> will just skip right over it, and return a 0 length string.
  1332.  
  1333.  KO> I have tried changing it to a READLN but it have no effect...
  1334.  
  1335. Works fine for me!  What is probably happening is that you have a CR remaining
  1336. in the keyboard buffer.  Clearing the buffer of any accumulated keystrokes
  1337. before your Readln may help.  Do this by -
  1338.  
  1339.   while KeyPressed do ReadKey;
  1340.  
  1341. This requires the {$X+} directive.  If that is not desirable then -
  1342.  
  1343.   while KeyPressed do while ReadKey = #0 do;
  1344.  
  1345. TeeCee
  1346.  
  1347. --- TC-ED   v2.01  
  1348.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1349.  * Tossed by SFToss v1.00b on 92/04/14  19:39:19
  1350.  
  1351. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1352.  
  1353. Conference 4
  1354. Date       04-14-92 02:31:54
  1355. From       Trevor Carlsen
  1356. To         Keven R. Pittsinger
  1357. Subject    Reading C With Pascal
  1358.  
  1359.  
  1360.  
  1361.  KR> ... I know there's some code out there to read C strings with TP 
  1362.  
  1363.  function Asc2Str(var CString; max: byte): string;
  1364.    { Converts an ASCIIZ string to a Turbo Pascal string }
  1365.    { with a maximum length of max.                      }
  1366.    var st  : array[1..255] of char absolute CString;
  1367.        len : integer;
  1368.    begin
  1369.      len        := pos(#0,st)-1;                       { Get the length }
  1370.      if (len > max) or (len < 0) then          { length exceeds maximum }
  1371.        len      := max;                             { so set to maximum }
  1372.      Asc2Str    := st;
  1373.      Asc2Str[0] := chr(len);                               { Set length }
  1374.    end;  { Asc2Str }
  1375.  
  1376. TeeCee
  1377.  
  1378. --- TC-ED   v2.01  
  1379.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1380.  * Tossed by SFToss v1.00b on 92/04/14  19:39:19
  1381.  
  1382. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1383.  
  1384. Conference 4
  1385. Date       04-14-92 18:07:58
  1386. From       Dj Murdoch
  1387. To         David G. Edwards
  1388. Subject    Pointers as function results (was: Power
  1389.  
  1390.   >The solution I use for dynamic objects (I don't have any 
  1391.  > Complex code) is 
  1392.  >to keep a counter in each matrix record; every function decrements the 
  1393.  >counter, and when it reaches 0, disposes of the object.  If you need to 
  1394.  
  1395.  >use an object twice, you increment the counter once before using it.
  1396.  
  1397.  DG> If you allocate an object twice, how do you get the first 
  1398.  DG> address back into the pointer variable so it can be 
  1399.  DG> disposed?   I must not understand the problem.  If I do:
  1400.  
  1401.  DG> new(p);
  1402.  DG> new(p);
  1403.  
  1404.  DG> Unless I save the value of the first p, how can I dispose 
  1405.  DG> it?  And if I save it, why not use two pointer variables, 
  1406.  DG> p1 and p2, instead?
  1407.  
  1408. You're right, there's no way to dispose of the first p^.  What I meant is
  1409. something like this:  Suppose X and Y are pointers to matrix objects.  If
  1410. I want to calculate Z as their product, and don't have any need for them any
  1411. more, then it's fine if MatMul disposes of them in 
  1412.  
  1413.   Z := MatMul(X,Y);
  1414.  
  1415. In fact, it's really handy, because it lets me calculate X Y Z as
  1416.  
  1417.   W := MatMul(X, MatMul(Y,Z));
  1418.  
  1419. The problem comes up when I try to calculate something like X^2, because MatMul
  1420. would get in trouble trying to dispose of X twice in
  1421.  
  1422.  Y := MatMul(X, X);
  1423.  
  1424. The solution I use is to keep a counter in every object, and to follow a rigid
  1425. discipline:
  1426.  
  1427.  1.  Newly created objects (function results) always have the counter set to 
  1428.  
  1429.      zero.  
  1430.  
  1431.  2.  Every function which takes a pointer to one of these objects as an 
  1432.      argument is sure to "touch" the pointer, by passing it exactly once to 
  1433.  
  1434.      another function.  (There's an exception below that lets you pass it more 
  1435.  
  1436.      than once if you need to.) 
  1437.  
  1438. 3.   If a function doesn't need to pass the object to another function, then 
  1439.  
  1440.      it passes it to the special function "Touch()", to satisfy rule 2.
  1441.      Touch checks the counter; if it's zero, it disposes of the object, 
  1442.      otherwise, it decrements it by one.
  1443.  
  1444. 4.   The way to get around the "exactly once" rule 2 is to call the "Protect" 
  1445.  
  1446.      function before you pass the object.  This just increments the counter.
  1447.  
  1448. 5.   Functions should never change objects being passed to them as arguments; 
  1449.  
  1450.      there's a function called "Local" which makes a local copy to work on if 
  1451.  
  1452.      you need it.  What Local does is to check the counter; if it's zero, 
  1453.  
  1454.      Local just returns the original object, otherwise it asks the object to 
  1455.  
  1456.      make a copy of itself.
  1457.  
  1458. For example, to do the line above safely, I'd code it as
  1459.  
  1460.   Y := MatMul(X, Protect(X));
  1461.  
  1462. MatMul would look something like this:
  1463.  
  1464.   Function MatMul(Y, Z : PMatrix): PMatrix;
  1465.   var
  1466.     result : PMatrix;
  1467.   begin
  1468.     { Allocate result, fill in the values appropriately, then }
  1469.     Touch(Y);
  1470.     Touch(Z);
  1471.     MatMul := result;
  1472.   end;
  1473.  
  1474. The first Touch would just decrement the counter in X, and the second would
  1475. dispose of it (assuming it wasn't already protected before the creation of Y).
  1476.  
  1477.  
  1478. I've found that this system works really well, and I can sleep at night, knowing
  1479. that I never leave dangling pointers even though I'm doing lots of allocations
  1480. and deallocations.
  1481.  
  1482. Here, in case you're interested, is the real matrix multiplier:
  1483.  
  1484.   Function MProd(x,y:PMatrix):PMatrix;
  1485.   { Calculate the matrix product of x and y }
  1486.   var
  1487.     result : PMatrix;
  1488.     i,j,k : word;
  1489.     mp : PFloat;
  1490.   begin
  1491.     if (x=nil) or (y=nil) or (x^.cols <> y^.rows) then
  1492.       MProd := nil
  1493.     else
  1494.     begin
  1495.       result := Matrix(x^.rows,y^.cols,nil,true);
  1496.       if result <> nil then
  1497.         with result^ do
  1498.         begin
  1499.           for i:=1 to rows do
  1500.             with x^.r^[i]^ do
  1501.               for j:=1 to cols do
  1502.               begin
  1503.                 mp := pval(i,j);
  1504.                 mp^ := 0;
  1505.                 for k:=1 to x^.cols do
  1506.                   mp^ := mp^ + c[k]*y^.r^[k]^.c[j];
  1507.               end;
  1508.         end;
  1509.       MProd := result;
  1510.       Touch(x);
  1511.       Touch(y);
  1512.     end;
  1513.   end;
  1514.  
  1515. As you can see, the memory allocation is a pretty minor part of it.  The dynamic
  1516. indexing is really ugly (I'd like to use "y[k,j]", but I'm stuck using "y^.r^[k]
  1517. .c[j]"), but I haven't found any way around that.
  1518.  
  1519.  
  1520. --- Msg V3.2
  1521.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1522.  * Tossed by SFToss v1.00b on 92/04/15  13:03:07
  1523.  
  1524. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1525.  
  1526. Conference 4
  1527. Date       04-14-92 18:41:57
  1528. From       Dj Murdoch
  1529. To         Max Maischein
  1530. Subject    Re: Powers / Memory under OS/2
  1531.  
  1532.   MM> Under Windows, there is no memory limit, or am I wrong ??
  1533.  
  1534. I think you're wrong, at least about Win 3.0.  In standard mode, the largest
  1535. allocatable block is 1Mb, and there are only about 4000 (8192 total, but the
  1536. system uses a lot) allocations available.  That puts an absolute upper limit
  1537. of 8 Gb on Windows memory, but since most allocations are way smaller than
  1538. 1Mb, in practice the limit is much lower.  (In enhanced mode, the limit is
  1539. 64Mb per allocation, but still, the 8192 allocations is the real bottleneck.)
  1540.  
  1541. I've read that Win 3.1 doubles the number of allocations allowed, but I don't
  1542. know if it changed the size limit.
  1543.  
  1544.  
  1545.  
  1546. --- Msg V3.2
  1547.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1548.  * Tossed by SFToss v1.00b on 92/04/15  13:03:07
  1549.  
  1550. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1551.  
  1552. Conference 4
  1553. Date       04-14-92 18:50:19
  1554. From       Dj Murdoch
  1555. To         Stephane Michaud
  1556. Subject    Re: Procedures...
  1557.  
  1558.   SM>         Is it possible to start a procedure that calls a second wich
  1559.  SM>         call a third and then quit the third and the second without
  1560.  SM>         never finishing them?? It's hard to understand... Here's
  1561.  SM>         an example:
  1562.  
  1563. Yes, it's possible.  Look for implementations of SetJump/LongJump (the C name
  1564. for this) or Catch/Throw (the LISP name).  There's one in Turbo/Object Professio
  1565. al, for instance.  The idea is that you have a function called SetJump, which
  1566. saves some state information in a record.  Then LongJump restores the state
  1567. information and you return from SetJump *again*, but with a different return
  1568. value.
  1569.  
  1570. --- Msg V3.2
  1571.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1572.  * Tossed by SFToss v1.00b on 92/04/15  13:03:07
  1573.  
  1574. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1575.  
  1576. Conference 4
  1577. Date       04-14-92 18:55:42
  1578. From       Dj Murdoch
  1579. To         All
  1580. Subject    Powers
  1581.  
  1582.  I was glancing through Stroustrup's book on C++ the other day, and was reminded
  1583. of the call here for user definable operators like "**" for powers.  He discusse
  1584.  exactly this case, and said that in C++, you shouldn't define a new operator
  1585. for powers, you should use a pow() function.  
  1586.  
  1587. (The reason:  in C++, you can't define new operators, you can only redefine
  1588. old ones.  Apparently there's no existing "**" operator, or any other operator
  1589. with the peculiar combining properties that "**" should have.)
  1590.  
  1591. I thought it was pretty funny.  It makes me much happier with my opinion that
  1592. Turbo Pascal should *not* allow operators to be defined/redefined.
  1593.  
  1594. --- Msg V3.2
  1595.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1596.  * Tossed by SFToss v1.00b on 92/04/15  13:03:07
  1597.  
  1598. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1599.  
  1600. Conference 4
  1601. Date       04-15-92 02:16:50
  1602. From       Trevor Carlsen
  1603. To         Joy Mukherjee
  1604. Subject    Encryption
  1605.  
  1606.  
  1607.  
  1608.  JM> Actually, being an amateur hacker myself, the way a hacker breaks that
  1609.  JM> type of thing is when its accessed, or unencrypted.  Rarely does a
  1610.  JM> hacker try to mess with just random byte strings.  Therefore, when you
  1611.  JM> unencrypt the string to print it out, the hacker will usually find the
  1612.  JM> key, and then not have any problems.
  1613.  
  1614. That is valid if the key is relatively short and repeating, or is used to
  1615. create a pseudo random sequence.  If the key is as long as the text being
  1616. encrypted and is not reused then decryption without knowing the key in advance
  1617. is impossible.  The method is known as the "one time pad" and is universally
  1618. recognised as the only proveably unbreakable encyphering method known. Knowing
  1619. the encryption/decryption algorithm is of no help whatsoever.
  1620.  
  1621. The DOD's encryption standard is, as far as is known, also unbreakable but
  1622. this has not been proven mathematically.
  1623.  
  1624.  JM> ... and in forever in your debt!
  1625.  
  1626. Forever is a long time! I'll be happy with a couple of weeks :-)
  1627.  
  1628. TeeCee
  1629.  
  1630.  
  1631. --- TC-ED   v2.01  
  1632.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1633.  * Tossed by SFToss v1.00b on 92/04/15  20:24:53
  1634.  
  1635. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1636.  
  1637. Conference 4
  1638. Date       04-15-92 02:33:09
  1639. From       Trevor Carlsen
  1640. To         Kevin O'Donnell
  1641. Subject    TELIX *.FON File Problems
  1642.  
  1643.  
  1644.  
  1645.  KO> Anyone know of a way to read in the TELIX fon file?
  1646.  KO> I have the record format but I do not know how to get past the header 
  1647.  
  1648.  KO> in the file...  Having the header there is messing up my reads to the 
  1649.  
  1650.  KO> file.
  1651.  
  1652. If you know the header size it is no problem.  There are two ways of doing
  1653. what you want.
  1654.  
  1655. 1.  Write your own little seek procedure.
  1656.  
  1657.     const
  1658.       HeaderSize = 155; { or whatever }
  1659.  
  1660.     procedure Seek(var f; rec: longint);
  1661.       var OldSize: word;
  1662.       begin
  1663.         with FileRec(f) do begin
  1664.           OldSize := RecSize;
  1665.           RecSize := 1;
  1666.           seek(file(f),rec * OldSize + HeaderSize);
  1667.           RecSize := OldSize;
  1668.         end;
  1669.       end;
  1670.  
  1671. 2.  Use BlockRead/Write.
  1672.  
  1673. Method 1 is probably easiest if your code is already written as no code changes
  1674. would be necessary, unless you were also using seek on other files, in which
  1675. case call the above procedure something else.
  1676.  
  1677. TeeCee
  1678.  
  1679.  
  1680.  
  1681. --- TC-ED   v2.01  
  1682.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1683.  * Tossed by SFToss v1.00b on 92/04/15  20:24:53
  1684.  
  1685. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1686.  
  1687. Conference 4
  1688. Date       04-15-92 06:43:54
  1689. From       Trevor Carlsen
  1690. To         Andrew J. Mead
  1691. Subject    Borland, OS/2 2.0, and you
  1692.  
  1693.  
  1694.  
  1695.  AJ> ...It's beginning to look like my 80%/20% Pascal/C-C++ ratio may reverse 
  1696.  
  1697.  AJ> itself in the next year out of necessity instead of desire.  I like C 
  1698.  
  1699.  AJ> and C++, but I prefer to program in Pascal, but unless the compilers 
  1700.  
  1701.  AJ> don't keep up, I'll have to go with C all the way.  Hopefully Borland 
  1702.  
  1703.  AJ> will read this and the posts of others, and realize that the 2.1 
  1704.  AJ> million Turbo Pascal programmers are ready to spend their money...
  1705.  
  1706. If at the end I *have* to switch to C or C++ (heaven forbid) due to Borland
  1707. deserting their roots,  I would not consider purchasing a Borland product
  1708. again!  I know that it might be a case of cutting off my nose etc... but I'd
  1709. be damned if I would knowingly do anything to support them if they were to
  1710. do that.
  1711.  
  1712. Having got that off my chest, you don't honestly believe that Borland would
  1713. do that do you?  It would be economic madness.  One thing Borland can never
  1714. be accused of in the past is knowing where the dollars come from.  I'd be
  1715. willing to bet big readies on an OS/2 version of TP before very long if the
  1716. operating system proves as successful as it appears it may become.
  1717.  
  1718. TeeCee
  1719.  
  1720. --- TC-ED   v2.01  
  1721.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1722.  * Tossed by SFToss v1.00b on 92/04/15  20:24:54
  1723.  
  1724. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1725.  
  1726. Conference 4
  1727. Date       04-15-92 08:22:30
  1728. From       Trevor Carlsen
  1729. To         Kevin O'Donnell
  1730. Subject    TELIX *.FON File Problems
  1731.  
  1732.  
  1733.  
  1734.  KO> Anyone know of a way to read in the TELIX fon file?
  1735.  KO> I have the record format but I do not know how to get past the header 
  1736.  
  1737.  KO> in the file...  Having the header there is messing up my reads to the 
  1738.  
  1739.  KO> file.
  1740.  
  1741. In my earlier message to you the seek routine I suggested has an important
  1742. stuff-up :-(  - it calls itself, when in fact it should call System.Seek.
  1743.  
  1744. Here is a demo program that demonstrates its use... (I don't know what all
  1745. the fields of a *.fon file record are but have been able to quickly determine
  1746. the general structure for the purposes of this demo.  Hope it helps.)
  1747.  
  1748. {$A+,B-,D-,E+,F-,I+,L-,N-,O-,R+,S+,V-,X+}
  1749. {$M 4096,0,0}
  1750.  
  1751. uses
  1752.   crt,
  1753.   dos;
  1754.  
  1755. const
  1756.   HeaderSize = 64;
  1757.   FonFile    : PathStr = 'C:\COMM\TELIX\TELIX.FON';
  1758. type
  1759.   fondir = record
  1760.              BBSname   : array[1..25] of char;
  1761.              BBSnumber : array[1..17] of char;
  1762.              Dummy1    : array[1..16] of byte;
  1763.              LastDate  : array[1..6]  of char;
  1764.              Dummy2    : array[1..8]  of byte;
  1765.              Password  : array[1..14] of char;
  1766.            end;
  1767.  
  1768. var
  1769.   telix : file of fondir;
  1770.   data  : fondir;
  1771.   x     : word;
  1772.  
  1773. procedure seek(var f; rec: longint);
  1774.   var OldSize: word;
  1775.   begin
  1776.     with FileRec(f) do begin
  1777.       OldSize := RecSize;
  1778.       RecSize := 1;
  1779.       system.seek(file(f),HeaderSize + (rec * OldSize));
  1780.       RecSize := OldSize;
  1781.     end; { with }
  1782.   end; { seek }
  1783.  
  1784. begin
  1785.   assign(telix,FonFile);
  1786.   reset(telix);
  1787.   seek(telix,0);
  1788.   clrscr;
  1789.   write  ('BBS Name                 Phone Number       ');
  1790.   writeln('Password        Last Date');
  1791.   write  ('============================================');
  1792.   writeln('=========================');
  1793.   window(1,3,80,25); x := 0;
  1794.   while not eof(telix) do begin
  1795.     read(telix,data);
  1796.     with data do
  1797.       writeln(BBSname,BBSnumber,'  ',Password,'  ',LastDate);
  1798.     inc(x);
  1799.     if x mod 22 = 0 then ReadKey;
  1800.   end; { while }
  1801.   close(telix);
  1802.   ReadKey;
  1803. end.
  1804.  
  1805. (Tested OK) :-)
  1806.  
  1807. TeeCee
  1808.  
  1809.  
  1810. --- TC-ED   v2.01  
  1811.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  1812.  * Tossed by SFToss v1.00b on 92/04/15  20:24:54
  1813.  
  1814. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1815.  
  1816. Conference 4
  1817. Date       04-13-92 19:25:02
  1818. From       Wilbert Van.leijen
  1819. To         Bas van Gaalen
  1820. Subject    CLOCK
  1821.  
  1822.  
  1823.  
  1824.  
  1825.  
  1826. ** Quoting a message from Bas van Gaalen to ALL  **
  1827.  
  1828.  >     Does anyone around here, has any idea how to put a clock somewhere
  1829.  > in the screen? What I mean is ofcourse not just GETTIME, and then put
  1830.  > the variables on the screen, but a interupt-driven clock!
  1831.  
  1832. Download STACK60.ZIP from 2:500/31 or 2:500/123.
  1833. Or check out TSRCLK2.ZIP -- same principle, but written in assembler
  1834. (occupies a mere 288 bytes in memory).
  1835.  
  1836.  > Adiosnapioso,
  1837.  
  1838. Groetz,
  1839.  
  1840. Wilbert
  1841.  
  1842. --- Dutchie V2.91e
  1843.  * Origin: Algorithms - Data Structures = Assembly Language (2:500/12.10956)
  1844.  * Tossed by SFToss v1.00b on 92/04/17  07:45:53
  1845.  
  1846. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1847.  
  1848. Conference 4
  1849. Date       04-13-92 19:29:45
  1850. From       Wilbert Van.leijen
  1851. To         Kyle Pritchett
  1852. Subject    VGA
  1853.  
  1854.  
  1855.  
  1856.  
  1857.  
  1858. ** Quoting a message from Kyle Pritchett to All  **
  1859.  
  1860.  > I am looking for a method (either a program or advise) to include a
  1861.  > 320x200x256 .PCX or .GIF into my Pascal source.
  1862.  
  1863. I did it as follows: wrote a TSR that wakes up when Alt-ScrollLock is pressed;
  1864. when active in foreground, it simply dumps the contents of the VGA screen
  1865. buffer & all 256 DAC registers to two files. Works great; bypasses the need
  1866. to crack the .GIF file format.
  1867.  
  1868. How does one write a TSR, you might ask? Grab a copy of Ross Wentworth's TPPOP
  1869. package and you'll have the project completed within a few hours. 
  1870. Regards,
  1871.  
  1872. Wilbert
  1873.  
  1874.  
  1875. --- Dutchie V2.91e
  1876.  * Origin: Algorithms - Data Structures = Assembly Language (2:500/12.10956)
  1877.  * Tossed by SFToss v1.00b on 92/04/17  07:45:53
  1878.  
  1879. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1880.  
  1881. Conference 4
  1882. Date       04-13-92 19:57:55
  1883. From       Wilbert Van.leijen
  1884. To         Jud Mccranie
  1885. Subject    testing records for equality
  1886.  
  1887.  
  1888.  
  1889.  
  1890. ** Quoting a message from Jud Mccranie to All  **
  1891.  
  1892.  > What is the best way to test 2 records (of the same type) to see
  1893.  > if they are the same?  Currently I'm using MOVE to copy each to an
  1894.  > array of bytes and then do a byte by byte comparison.  Is there a
  1895.  > better way?
  1896.  
  1897. Tip 1:  Align your data on Word, Double Word, or any other power of 2
  1898.         boundaries!  This speeds up indexing tremendously.
  1899.  
  1900.         Try for example:
  1901.  
  1902.         For i := 1 to 10000 Do
  1903.           SomeRec := SomeArrayOfRecord[i]
  1904.  
  1905.         for values of SizeOf(SomeRec) = 7 and SizeOf(SomeRec) = 8.
  1906.         If SizeOf(SomeRec) = 7, the record is indexed using the slow 'MUL'
  1907.         instruction; in the latter case, the index register is shifted
  1908.         left three bits, and that's mucho faster on most processors.
  1909.  
  1910. Tip 2:  Consider Typecasting.  Assume ValueA and ValueB to be of a type
  1911.         whose SizeOf returns 8.
  1912.  
  1913.         Type
  1914.           Rec8Type = Array[0..1] of LongInt;
  1915.  
  1916.         If (Rec8Type(ValueA)[0] = Rec8Type(ValueB)[0]) and
  1917.           (Rec8Type(ValueA)[1] = Rec8Type(ValueB)[1]) Then
  1918.           WriteLn('Equal!');
  1919.  
  1920. Using this technique, you can achive some more speed copying the records to
  1921. be compared to global variables; indexing of these is done at compile-time.
  1922.  Somethimes you can accomplish the same with case-variant records, but often
  1923. type-casting is more convenient.
  1924.  
  1925. Regards,
  1926.  
  1927. Wilbert
  1928.  
  1929. --- Dutchie V2.91e
  1930.  * Origin: Algorithms - Data Structures = Assembly Language (2:500/12.10956)
  1931.  * Tossed by SFToss v1.00b on 92/04/17  07:45:53
  1932.  
  1933. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1934.  
  1935. Conference 4
  1936. Date       04-15-92 17:49:02
  1937. From       Dj Murdoch
  1938. To         Dan Davies
  1939. Subject    Re: Object-oriented programming
  1940.  
  1941.   DD> I am currently researching object-oriented programming for a college
  1942.  DD> course and would appreciate some feedback from active 
  1943.  DD> object-oriented programmers on the following questions:
  1944.  DD>    1. What do you find to be the most significant advantages of OOP?
  1945.  
  1946. I use inheritance the most, I think.  You might have read one of my messages
  1947. yesterday about how I handle dynamic allocation of matrices as function results;
  1948. the only reason this is reasonable is because the matrix objects can inherit
  1949. that function from the base object, I don't have to rewrite it for every differe
  1950. t type I deal with.
  1951.  
  1952.  DD>    2. What are the most significant drawbacks?
  1953.  
  1954. By far the biggest drawback is that it's not at all standardized.  There's
  1955. some slim hope of porting non-OOP TP code to other compilers; just about zero
  1956. hope for OOP code, though.
  1957.  
  1958.  DD>    3. What aspects of OOP are hardest to learn?
  1959.  
  1960. Good design.  Of course, that's the hardest part of anything to learn.
  1961.  
  1962.  DD>    4. How long have you been using OOP?
  1963.  
  1964. I'd say about 2 years.  I started before TP 6 came out, but have since rewritten
  1965. everything I did in those days.
  1966.  
  1967.  
  1968. --- Msg V3.2
  1969.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1970.  * Tossed by SFToss v1.00b on 92/04/17  09:42:17
  1971.  
  1972. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1973.  
  1974. Conference 4
  1975. Date       04-15-92 17:58:02
  1976. From       Dj Murdoch
  1977. To         Greg Smith
  1978. Subject    Re: Powers / Memory Under Os/
  1979.  
  1980.   GS> limit. Besides, the 386/486 processor memory limit is 4 Gigabytes.. Only
  1981.      8 times more than the limit IBM set. I don't know if the 586 will change
  1982.  GS> this.
  1983.  
  1984. That's only in flat 32 bit addressing mode.  The 386 can have a 16 bit segment
  1985. as well as a 32 bit offset, for 48 bit addresses - 256 terabits, I think.
  1986.  Not all of it can be physical memory, of course, but your program needn't
  1987. know the 
  1988.  
  1989.  GS> Anyone with TPW care to comment?  I abhor Windows myself.
  1990.  
  1991. There's still the 64K/object limit, but you can have several thousand objects,
  1992. so the effective limit in TPW is something like 256 megabytes.  In Windows
  1993. standard mode, this all has to be physical memory, but in enhanced mode, it
  1994. could be virtual memory on disk.
  1995.  
  1996. --- Msg V3.2
  1997.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1998.  * Tossed by SFToss v1.00b on 92/04/17  09:42:17
  1999.  
  2000. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2001.  
  2002. Conference 4
  2003. Date       04-15-92 18:05:10
  2004. From       Dj Murdoch
  2005. To         Ford Crews
  2006. Subject    Re: 8087 disable
  2007.  
  2008.   FC> Has anybody got a routine or progam to disable the math 
  2009.  FC> coprocessor.  I would like to test how well programs run 
  2010.  FC> without a math coprocessor even though I have one Installed.
  2011.  
  2012. Just SET 87=N at the DOS command line before you run the program, and TP will
  2013. pretend there's no coprocessor.
  2014.  
  2015. --- Msg V3.2
  2016.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2017.  * Tossed by SFToss v1.00b on 92/04/17  09:42:17
  2018.  
  2019. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2020.  
  2021. Conference 4
  2022. Date       04-15-92 18:06:49
  2023. From       Dj Murdoch
  2024. To         Ford Crews
  2025. Subject    Re: collection out of range errors
  2026.  
  2027.   FC> Special routine exit message: ure Stack Shows: 17AC:0598
  2028.  
  2029. What was all that about?
  2030.  
  2031.  
  2032. --- Msg V3.2
  2033.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2034.  * Tossed by SFToss v1.00b on 92/04/17  09:42:17
  2035.  
  2036. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2037.  
  2038. Conference 4
  2039. Date       04-15-92 18:09:57
  2040. From       Dj Murdoch
  2041. To         Doug Gale
  2042. Subject    Re: Exit?
  2043.  
  2044.   DG> I am not a Pascal programmer, but I do know (or am 
  2045.  DG> learning) the contruction of yhe loops. Where would the 
  2046.  DG> program go to in a proceedure like this:
  2047.  
  2048.  DG> if abcde=5 then
  2049.  DG> begin   
  2050.        if varx=0 then   
  2051.        begin      
  2052.          variab=10      
  2053.          exit;   
  2054.        end;
  2055.  DG>   cdefg=10; 
  2056.        Would go here after the exit, 
  2057.      end;
  2058.  
  2059.  DG> Or HERE
  2060.  
  2061. It is the same as a jump to the last "end" in the procedure/function/program:
  2062.  it exits the current one.  That might be the last one you showed, or it might
  2063. be even further down.
  2064.  
  2065. --- Msg V3.2
  2066.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2067.  * Tossed by SFToss v1.00b on 92/04/17  09:42:17
  2068.  
  2069. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2070.  
  2071. Conference 4
  2072. Date       04-16-92 07:45:34
  2073. From       Dj Murdoch
  2074. To         Matt Schuttloffel
  2075. Subject    Re: Delay Patch
  2076.  
  2077.   > -!- MajikToss v0.07m
  2078.  
  2079.  MS> As a read through the echo, it seems that a lot of people 
  2080.  MS> are using this.  Who is it written by?  Where can I pick 
  2081.  MS> up a copy?  As I am writing my own tosser, I would like to 
  2082.  MS> have something to look at for ideas of other features.
  2083.  
  2084. Since I didn't see a smiley, I'll assume you were serious.  The reason it
  2085. looks like so many people are using MajikToss, is because someone at 1:3601/14.2
  2086.  is using it and just dumped a huge pile of dups into the echo.  It's a buggy
  2087. piece of software which is only used by careless idiots.  Don't touch it. 
  2088.  
  2089.  
  2090. --- Msg V3.2
  2091.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2092.  * Tossed by SFToss v1.00b on 92/04/17  09:42:17
  2093.  
  2094. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2095.  
  2096. Conference 4
  2097. Date       04-16-92 07:49:21
  2098. From       Dj Murdoch
  2099. To         Bill Auclair
  2100. Subject    Re: MOVEing files vs. copy/delete
  2101.  
  2102.   BA> Recently, someone mentioned a way to re-assign a file to 
  2103.  BA> another directory at the DOS level, *without* having to 
  2104.  BA> copy and delete.  This sounds like a much faster method, 
  2105.  BA> although I suspect it is limited to copying within the 
  2106.  BA> same HD partition.  Would anyone care to elaborate on how this is done?
  2107.  
  2108. It's very simple:  the rename file dos service used by TP's Rename procedure
  2109. works better than the DOS RENAME command.   It lets you change the directory
  2110. of a file, resulting in a very quick move.
  2111.  
  2112. As you guessed, there are several restrictions:
  2113.  
  2114.   - the new directory has to already exist.  
  2115.   - you can use the Rename method to rename a directory under the same
  2116.     parent, but you can't move it to another branch of your directory tree.
  2117.   - the new directory has to be on the same logical disk (i.e. A:, B:, etc.)
  2118.     as the original one.
  2119.  
  2120. --- Msg V3.2
  2121.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2122.  * Tossed by SFToss v1.00b on 92/04/17  09:42:17
  2123.  
  2124. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2125.  
  2126. Conference 4
  2127. Date       04-17-92 07:56:53
  2128. From       Trevor Carlsen
  2129. To         Alf Katz
  2130. Subject    OPRO V1.12
  2131.  
  2132.  
  2133.  
  2134.  AK> In a message to ben Somebody, you mentioned that you
  2135.  AK> had Opro V1.12.
  2136.  
  2137.  AK> I have version 1.10 and use it A LOT.  Any idea about what
  2138.  AK> changes have been made since 1.10?  Specifically, I have
  2139.  AK> encountered a bug which hangs the system if you execute an
  2140.  AK> external program with the mouse enabled.  I've had to send
  2141.  AK> out a couple of applications without mouse support because
  2142.  AK> of this.
  2143.  
  2144. I believe the latest version is 1.14.
  2145.  
  2146. If you are having problems, what did Turbo Power say when you approached them
  2147. for support? Or didn't you? And if not, why not? Their support on that sort
  2148. of thing is brilliant.  Mmmmm...
  2149.  
  2150. If you do have a genuine bug they will give you a fix and your next upgrade
  2151. is free. (I think that is how they work still).  In any event an upgrade is
  2152. only $20.00 - it would be false economy not to get that if you are having
  2153. problems. Terry Hughes from Turbo Power frequents this echo so address your
  2154. query to him.
  2155.  
  2156. TeeCee
  2157.  
  2158. --- TC-ED   v2.01  
  2159.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  2160.  * Tossed by SFToss v1.00b on 92/04/18  07:52:55
  2161.  
  2162. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2163.  
  2164. Conference 4
  2165. Date       04-17-92 08:08:57
  2166. From       Trevor Carlsen
  2167. To         AKIBA GREEN
  2168. Subject    Re: Vision BBS Source
  2169.  
  2170.  
  2171.  
  2172.  AG> Wrongo...LSD is derived from Forum-PC, but is well over 75%
  2173.  AG> entirely it's own..if you've seen versions of the source,
  2174.  AG> you'd know what I meant..even the 1.06 lsd is over 60% it's
  2175.  AG> own...We give Credit where credit is do...I have the
  2176.  AG> forum-pc source and it is a hell of a lot shittier than the
  2177.  AG> LSD...Ken Duda(if that's his name) couldn't sue Ken Sallot,
  2178.  AG> cause I am sure Ken got the source off a 100% pd BBS and
  2179.  AG> that means it was released PD. Anyways, I belive Ken Sallot
  2180.  AG> gives credit back to the original Forum-PC..if you rat on
  2181.  AG> Ken though, you've got to rat on:ViSiON/ViSiON-X,
  2182.  AG> Revelation, Oblivion/2, and over 12 others...
  2183.  
  2184. Either take this to netmail, where it should be, or drop the thread.  You
  2185. have been warned for the last time.
  2186.  
  2187. Trevor Carlsen
  2188. Moderator.
  2189.  
  2190. --- TC-ED   v2.01  
  2191.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  2192.  * Tossed by SFToss v1.00b on 92/04/18  07:52:55
  2193.  
  2194. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2195.  
  2196. Conference 4
  2197. Date       04-17-92 08:16:36
  2198. From       Trevor Carlsen
  2199. To         Aaron Marasco
  2200. Subject    Help Needed.
  2201.  
  2202.  
  2203.  
  2204.  AM>  { Fancy hi-bit character signature ego-trip deleted }
  2205.  AM> [Tell me what you think...] 
  2206.  
  2207. Hi-bit characters are illegal in this echo.  Please do not use them again.
  2208.  Fancy multi-line signatures are very much frowned upon in international echos
  2209. due to the extra cost they add to ISD tolls.  Please consider that in future.
  2210.  
  2211. Trevor Carlsen
  2212. Moderator.
  2213.  
  2214.  
  2215.  
  2216. --- TC-ED   v2.01  
  2217.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  2218.  * Tossed by SFToss v1.00b on 92/04/18  07:52:55
  2219.  
  2220. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2221.  
  2222. Conference 4
  2223. Date       04-17-92 08:36:20
  2224. From       Trevor Carlsen
  2225. To         Steve Hodges
  2226. Subject    Encryption
  2227.  
  2228.  
  2229.  
  2230.  TC>without knowing the key in advance is impossible.  The method is 
  2231.  TC>known as the "one time pad" and is universally recognised as the 
  2232.  TC>only proveably unbreakable encyphering method known. Knowing the 
  2233.  TC>encryption/decryption algorithm is of no help whatsoever.
  2234.  
  2235.  
  2236.  SH> Unfortunatly Trevor this is not always true.  If the
  2237.  SH> "hacker" has some idea of what the cleartext or the key was,
  2238.  SH> then this knowlege can be used to obtain the rest.
  2239.  
  2240. What you say is true if the key is non-random.  However any file produced
  2241. randomly and used only once as a key makes the method 100% secure.
  2242.  
  2243. TeeCee
  2244.  
  2245. --- TC-ED   v2.01  
  2246.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  2247.  * Tossed by SFToss v1.00b on 92/04/18  07:52:55
  2248.  
  2249. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2250.  
  2251. Conference 4
  2252. Date       04-17-92 08:24:39
  2253. From       Trevor Carlsen
  2254. To         Kevin O'Donnell
  2255. Subject    READLN and READ
  2256.  
  2257.  
  2258.  
  2259.  KO> I tried your idea and it did not work.  The second execution of the 
  2260.  KO> below function does not wait for the user to enter anything, just 
  2261.  KO> skips over the READ as if it were not there.
  2262.  
  2263.  KO> I have doubts now that it is a CR still in the keyboard buffer because 
  2264.  
  2265.  KO> I put 7 of these functions back to back and still, only the first 
  2266.  KO> executed as planned, the rest were skipped.
  2267.  
  2268. Kevin my comments were made because you had stated that you had tried it with
  2269. a readln rather than the read. Without a readln that will produce exactly
  2270. the symtoms you describe.  This is fully described in the Library reference
  2271. (p108-109).
  2272.  
  2273.  KO> Could I see an example of the one you use?
  2274.  
  2275. I just changed the read to readln.  But you said you had tried that.  I tried
  2276. it again with a readln and it works perfectly.
  2277.  
  2278. TeeCee
  2279.  
  2280. --- TC-ED   v2.01  
  2281.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  2282.  * Tossed by SFToss v1.00b on 92/04/18  07:52:55
  2283.  
  2284. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2285.  
  2286. Conference 4
  2287. Date       04-17-92 08:54:19
  2288. From       Trevor Carlsen
  2289. To         Matt Schuttloffel
  2290. Subject    Fast Disk IO
  2291.  
  2292.  
  2293.  
  2294.  MS> Does anyone have any code for fast disk I/O routines in inline code or 
  2295.  
  2296.  MS> assembler?  It would be nice if it could be used on typed (especially 
  2297.  
  2298.  MS> needed), untyped (would be nice), and text (not really THAT 
  2299.  MS> necessary).  Output is needed as well as input. Seeks would be nice as 
  2300.  
  2301.  MS> well.
  2302.  
  2303. No significant improvement will be noticed by coding disk I/O routines into
  2304. assembler or inline code.  Is that what you were seeking or was there another
  2305. reason?
  2306.  
  2307. TeeCee
  2308.  
  2309. --- TC-ED   v2.01  
  2310.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  2311.  * Tossed by SFToss v1.00b on 92/04/18  07:52:55
  2312.  
  2313. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2314.  
  2315. Conference 4
  2316. Date       04-17-92 09:45:04
  2317. From       Trevor Carlsen
  2318. To         Ken Burrows
  2319. Subject    Help Needed with TP arrays
  2320.  
  2321.  
  2322.  
  2323.  BB>      Is there any way to "re-dimension" an array once the program
  2324.  BB>      has started running?
  2325.  
  2326.  KB> Not that I know of. When dealing with unknow number of elements, you 
  2327.  
  2328.  KB> may be better of with linked lists. They are somewhat simmilar to 
  2329.  KB> arrays, in that they are built of elements, but they can grow 
  2330.  KB> dynamicly.
  2331.  KB> ...
  2332.  KB> The latest issue of PcTechniques has a nice writeup on linked lists. 
  2333.  
  2334.  KB> It's source examples are in that dreaded C stuff, but the concepts in 
  2335.  
  2336.  KB> the article are simmilar. I'd be more that happy to give you a hand 
  2337.  KB> with linked lists if you want. (I love em!!!)
  2338.  
  2339. There is no doubt that linked lists have their uses.  However using them as
  2340. a replacement for an array is not one of them.  The reason is of course that
  2341. a linked list cannot be accessed randomly.
  2342.  
  2343. TP can use a pseudo dynamic array - I won't post the code again, as no doubt
  2344. you have seen it by now, and this is undoubtedly the way to go when the size
  2345. of an array is unknown at compile time and known at run time. If the size
  2346. is unknown at runtime then a linked list that can be converted to a dynamic
  2347. array is one way to go.
  2348.  
  2349. In my experience there are many programmers who use linked lists when an alterna
  2350. ive type of structure would be a better way to do things.
  2351.  
  2352. TeeCee
  2353.  
  2354. --- TC-ED   v2.01  
  2355.  * Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
  2356.  * Tossed by SFToss v1.00b on 92/04/18  07:52:55
  2357.  
  2358. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2359.  
  2360. Conference 4
  2361. Date       04-17-92 11:04:23
  2362. From       Dj Murdoch
  2363. To         John Giesbrecht
  2364. Subject    Re: Procedure start-up code
  2365.  
  2366.   JG> Indeed.  (In Borland Pascal, perhaps?)  But in the 
  2367.  JG> meantime, Dj Murdoch's DUMPPROG is a *very* convenient way 
  2368.  JG> to get a code listing.  By simply redirecting its output 
  2369.  JG> (to a .LST file, for example), you can get in one fell 
  2370.  JG> swoop what would take countless pane dumps in Turbo 
  2371.  JG> Debugger.  It's very well done (Thanks, Dj!).  I don't 
  2372.  JG> know how widely it's been distributed; if you are 
  2373.  JG> interested, and have trouble finding it, let me know.
  2374.  
  2375. I sent it out on PDN Pascal, so if you know a node that gets that (e.g. my
  2376. bossnode, 1:221/177), it's there.  I'm planning an update sometime (maybe
  2377. a month or so).  The planned enhancements are:
  2378.  
  2379.   - resolving numeric addresses as symbolic names
  2380.   - 386/486 opcode display
  2381.   - maybe:  the ability to read the debug info from the .EXE, rather than
  2382. reading a .MAP file.
  2383.   
  2384.  
  2385. --- Msg V3.2
  2386.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2387.  * Tossed by SFToss v1.00b on 92/04/18  12:45:20
  2388.  
  2389. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2390.  
  2391. Conference 4
  2392. Date       04-17-92 11:08:36
  2393. From       Dj Murdoch
  2394. To         Jeff Sheets
  2395. Subject    Re: Fast video (was: thanks)
  2396.  
  2397.   JS> procedure PutPixel(var x,y : word; c : byte);
  2398.  JS> var
  2399.  JS>   cc : word;
  2400.  JS> begin
  2401.  JS>   cc := x + y * 320;
  2402.  JS>   mem[$A000:cc] := c;
  2403.  JS> end;
  2404.  
  2405. I'd recode this one in inline assembler, but if you wanted it in Pascal, it
  2406. would be quite a bit faster like this:
  2407.  
  2408.  procedure PutPixel(x,y : word; c:byte);
  2409.  begin
  2410.    mem[$A000:x + y*320] := c
  2411.  end;
  2412.  
  2413. The changes are to pass x and y by value (this is both faster, and more flexible
  2414. , and to skip storing the intermediate result cc to memory.  I think you'll
  2415. also end up with a simpler stack frame, since there are no locals.
  2416.  
  2417. Here's my attempt at an inline version of it, which would certainly be faster,
  2418. but might not work.  Use at your own risk!
  2419.  
  2420. procedure PutPixel(x,y:word; c: byte); Inline(
  2421.   $55/                   {     push bp}
  2422.   $89/$E5/               {     mov bp,sp}
  2423.   $8B/$46/$04/           {     mov ax,[bp+4] ; ax := y}
  2424.   $B1/$06/               {     mov cl,6}
  2425.   $D3/$E0/               {     shl ax,cl}
  2426.   $89/$C3/               {     mov bx,ax     ; ax := y*64}
  2427.   $D1/$E3/               {     shl bx,1}
  2428.   $D1/$E3/               {     shl bx,1}
  2429.   $01/$C3/               {     add bx,ax     ; bx := y*320}
  2430.   $03/$5E/$06/           {     add bx,[bp+6] ; bx := x+y*320}
  2431.   $B8/$00/$A0/           {     mov ax,$a000}
  2432.   $8E/$C0/               {     mov es,ax}
  2433.   $8A/$46/$02/           {     mov al,[bp+2] ; al := c}
  2434.   $26/$88/$07/           {     es: mov byte ptr [bx],al ; mem[$a000:x + y*320] := c}
  2435.  
  2436.   $5D/                   {     pop bp}
  2437.   $83/$C4/$06);          {     add sp,6}
  2438.  
  2439.  JS> BTW - I saw the term Wheel used with TurboVision.  What 
  2440.  JS> does it mean?  Thanks in advance.
  2441.  
  2442. I don't think anything special.  If I remember the reference, it was something
  2443. like "inherit the wheel" - it's just supposed to be a joke reference to the
  2444. old saying, "don't reinvent the wheel".
  2445.  
  2446. --- Msg V3.2
  2447.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2448.  * Tossed by SFToss v1.00b on 92/04/18  12:45:20
  2449.  
  2450. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2451.  
  2452. Conference 4
  2453. Date       04-17-92 11:33:56
  2454. From       Dj Murdoch
  2455. To         Stephane Michaud
  2456. Subject    Re: Procedures...
  2457.  
  2458.   DM>Yes, it's possible.  Look for implementations of 
  2459.  SM> SetJump/LongJump (the C nam
  2460.  DM>for this) or Catch/Throw (the LISP name).  There's one in Turbo/Object
  2461.  DM>Professional, for instance.  The idea is that you have 
  2462.  SM> a function called
  2463.  DM>SetJump, which saves some state information in a record.  Then LongJump
  2464.  DM>restores the state information and you return from 
  2465.  SM> SetJump *again*, but with
  2466.  DM>different return value.
  2467.  
  2468.  SM>         Is it possible to do it with Turbo Pascal 6.0 (Not
  2469.  SM>         professional) ???.
  2470.  
  2471.  Yes. TP 6.0 and TP 6.0 Professional are exactly the same language.  I'd recomme
  2472. d buying Object Professional (a third party library from TurboPower), but
  2473. you can probably find a PD implementation if you look around enough.
  2474.  
  2475. --- Msg V3.2
  2476.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2477.  * Tossed by SFToss v1.00b on 92/04/18  12:45:21
  2478.  
  2479. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2480.  
  2481. Conference 4
  2482. Date       04-17-92 11:36:21
  2483. From       Dj Murdoch
  2484. To         Steve Gabrilowitz
  2485. Subject    Re: Delay Patch
  2486.  
  2487.   SG> One of us is missing something, here's a code segment that 
  2488.  SG> I haven't tested on different machines, but I don't see 
  2489.  SG> why it shouldn't produce consistant results on any machine 
  2490.  SG> and I wouldn't consider it particularly fancy ;-)
  2491.  
  2492. { Method based on watching the BIOS timer tick deleted }
  2493.  
  2494.  SG> I have timed this under various system loads and it 
  2495.  SG> appears to perform consistantly, unlike the Crt.Delay 
  2496.  SG> which counts on the calibration it does in its 
  2497.  SG> initialization remaining accurate.  Of course, it does 
  2498.  SG> have the disadvantage of inherantly being off by an 
  2499.  SG> average of 1/36 seconds but the nice thing about it is 
  2500.  SG> that the variance will be a constant rather than dependant 
  2501.  SG> on the length of the delay.
  2502.  
  2503. I think your method is best if 1/18 sec accuracy is all you need, but the
  2504. original TP Delay is much more accurate (when it's working).  Yours, for instanc
  2505. , will badly mess up
  2506.  
  2507.   Delay(1);   { Delay for 1 ms }
  2508.  
  2509. whereas Turbo's will do pretty well on most machines. 
  2510.  
  2511. --- Msg V3.2
  2512.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2513.  * Tossed by SFToss v1.00b on 92/04/18  12:45:21
  2514.  
  2515. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2516.  
  2517. Conference 4
  2518. Date       04-17-92 11:43:30
  2519. From       Dj Murdoch
  2520. To         Matt Schuttloffel
  2521. Subject    Re: Fast Disk IO
  2522.  
  2523.   MS> Does anyone have any code for fast disk I/O routines in 
  2524.  MS> inline code or assembler?  It would be nice if it could be 
  2525.  MS> used on typed (especially needed), untyped (would be 
  2526.  MS> nice), and text (not really THAT necessary).  Output is 
  2527.  MS> needed as well as input. Seeks would be nice as well.
  2528.  
  2529.  MS> Tall order ... but who knows what's out there?
  2530.  
  2531. Use streams.  If you set a large buffer in a TBufStream, it goes pretty fast.
  2532.  You can do the same with SetTextBuffer for a text file, or use my streams
  2533. unit (STREAMS11.ZIP, available on PDN Pascal nodes, e.g. 1:221/177, 1-519-578-
  2534. 9314,9600,HST,V42b) to take advantage of the stream buffering if you don't
  2535. want to manage the allocation/deallocation of the buffer yourself. 
  2536.  
  2537. --- Msg V3.2
  2538.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2539.  * Tossed by SFToss v1.00b on 92/04/18  12:45:21
  2540.  
  2541. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2542.  
  2543. Conference 4
  2544. Date       04-17-92 11:47:33
  2545. From       Dj Murdoch
  2546. To         Alf Katz
  2547. Subject    Re: OPRO V1.12
  2548.  
  2549.   AK> G'day,
  2550.  AK>         In a message to ben Somebody, you mentioned that 
  2551.  AK> you had Opro V1.12.
  2552.  
  2553.  AK> I have version 1.10 and use it A LOT.  Any idea about what 
  2554.  AK> changes have been made since 1.10?  Specifically, I have 
  2555.  AK> encountered a bug which hangs the system if you execute an 
  2556.  AK> external program with the mouse enabled.  I've had to send 
  2557.  AK> out a couple of applications without mouse support because of this.
  2558.  
  2559. I'd guess you haven't reset the mouse before the shell (if you don't, your
  2560. program will still be used to handle mouse events), but maybe there really
  2561. is a bug.  It sounds as though you haven't told TurboPower about it, though.
  2562.  Why wouldn't you?  Usually you get a bug fix for a reproducible bug in a
  2563. day or two, and if they can't find a simple fix, you usually get a free update
  2564. to the next version (which *always* fixes any bugs I've found).
  2565.  
  2566. --- Msg V3.2
  2567.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  2568.  * Tossed by SFToss v1.00b on 92/04/18  12:45:21
  2569.